<?php

/*##############################################################################
##  CLASSE D'ACCES AUX DONNEES
##############################################################################*/
class MySqlDb//***************************************************************
{
    // Parametres de connexion
    protected $host;
    protected $user;
    protected $pass;
    protected $base;
    // La connection à la base
    public $connect_id;
    var $nb_requetes;


// Constructeur    
function __construct($host='localhost', $user='root', $pass, $base)//-----------
{
    // On retient les paramètres de connection
    $this->host = $host;
    $this->user = $user;
    $this->pass = $pass;
    $this->base = $base;
    // On initialise le nombre de requetes
    $this->nb_requetes=0;
	$this->sqls = Array();
}//------------------------------------------------------------------__construct


// Connection au serveur sql
function connect()
{
    $this->connect_id = new mysqli( $this->host, $this->user, $this->pass);
    if ($this->connect_id)
    {
        if($this->connect_id->select_db($this->base))
        {
            $this->connect_id->query("SET NAMES 'utf8'");
            return $this->connect_id;
        }
        else 
            return FALSE;
    }
    else 
        return FALSE;    
}

function disconnect()
{
	$this->connect_id->close();
}

function RequetesScript($fichier)
{
    $requetes = "";
    // on charge le fichier SQL     
    $sql = file($fichier);
    // on le lit 
    foreach($sql as $l) 
    {
        // suppression des commentaires 
        if (substr(trim($l),0,2)!='--' && trim($l)!='') 
        {
            $requetes .= $l;
        }
    }  
    // on sépare les requêtes   
    $reqs = split(";",$requetes);
    return $reqs;
}

// Execution d'un fichier SQL
function script($fichier)//-----------------------------------------------------
//http://www.developpez.net/forums/d158945/php/php-sgbd/sql-executer-script-sql-php/
{ 
    $reqs = $this->RequetesScript($fichier);
    // et on les éxécute
    foreach($reqs as $req) 
    {
        // stop si erreur 
        if (!$this->query($req) && trim($req)!="")
        {
            die('ERROR : '.$req); 
        }
    }
}//-----------------------------------------------------------------------script


// Execution d'une requete
function query($sql, $log=True)//----------------------------------------------------------
{
    $this->nb_requetes += 1;
	$this->sqls[] = $sql;
    
/*
    //ligne à écrire 
    if ($log){
		$id = (isset($_SESSION[SES_USER_ID]))? $_SESSION[SES_USER_ID]:-1;
		$ligne = date('Y-m-d H:i:s')."\t".$_SERVER['PHP_SELF']."\t".$id."\t$sql\n";
		// ouverture du fichier de log, le mode "a+" permet d'écrire à la fin 
		if ( $fp = fopen('log_sql.txt', "a+") )
		{
			//écriture de la ligne à concurrence de 1024 caractères
			fwrite($fp, $ligne, 1024);
			//fermeture du fichier
			fclose($fp);
		}
	}
*/
    return @$this->connect_id->query($sql);

}//------------------------------------------------------------------------query


// Numéro d'erreur
function errno()//--------------------------------------------------------------
{
    return mysqli_errno();
}//------------------------------------------------------------------------errno


// Nombre de lignes affectées
function lignes()//-------------------------------------------------------------
{
    return $this->connect_id->affected_rows;
}//-----------------------------------------------------------------------lignes


// Teste si l'utilisateur est connecté, par la session ou es cookies
function IsAuth()//-------------------------------------------------------------
{
    // On retient la page
    $_SESSION[SES_PAGE] = $_SERVER['PHP_SELF'];
    
    if (!isset($_SESSION[SES_USER_NIVEAU]))// Si l'user n'a pas (ou plus) une session déjà ouverte
    {		
        if (isset($_COOKIE[COO_AUTH]))// Si l'user a un cookie d'identification
        {
            // On lit le cookie
            $md5 = $_COOKIE[COO_AUTH];
            return $this->AuthByMd5($md5);
        }
        else // Si l'user est totalement inconnu
            return FALSE;
    }
    return TRUE;
}//-----------------------------------------------------------------------IsAuth


// Essaye d'authentifier l'user par son log/pass
function AuthByPass($nom, $pass)//----------------------------------------------
{
    $sql='SELECT uti_id, uti_nom, uti_prenom, uti_niveau'.
        ' FROM utilisateurs'.
        " WHERE uti_actif=1 AND UPPER(uti_nom)='".strtoupper($nom)."' AND uti_motdepasse='".sha1(strtoupper($pass))."'";
    if ( $result = $this->query($sql) )
    {
        if ( $result->num_rows )
        {
            $row = $result->fetch_assoc();
            $_SESSION[SES_USER_NIVEAU]=$row['uti_niveau'];
            $_SESSION[SES_USER_ID] = $row['uti_id'];
            $_SESSION[SES_USER_NOM] = $row['uti_nom'].', '.$row['uti_prenom'];
            return TRUE;
        }
    }
    return FALSE;
}//-------------------------------------------------------------------AuthByPass


// Essaye d'authentifier l'user par le md5 de son cookie
function AuthByMd5($md5)//------------------------------------------------------
{
    $sql='SELECT uti_id, uti_nom, uti_prenom, uti_motdepasse, uti_niveau'.
        ' FROM utilisateurs';
    if ($result= $this->query($sql) )
        if ( $result->num_rows ){
            for ($i = 0; $i < $result->num_rows; $i++)
            {
                $row = $result->fetch_assoc();
				if (md5(strtoupper($row['uti_nom']).$row['uti_motdepasse'].date('d-m-Y')) == $md5)
                {
                    $_SESSION[SES_USER_NIVEAU]=$row['uti_niveau'];
                    $_SESSION[SES_USER_ID] = $row['uti_id'];
                    $_SESSION[SES_USER_NOM] = $row['uti_nom'].', '.$row['uti_prenom'];
                    return TRUE;
                }
            }
		}
    return FALSE;
}//--------------------------------------------------------------------AuthByMd5

// Affiche toutes les requetes faites par la base
function debug()//--------------------------------------------------------
{
	echo implode($this->sqls,'<br/>');
}//-----------------------------------------------------------------------------

// Verifie qu'une valeur est unique dans une table
function Unique($table, $champ, $valeur, $key, $id)
{
	$sql = "SELECT $champ"
		." FROM $table"
		." WHERE $champ='$valeur' AND $key!=$id";
	if ( $result = $this->query($sql) )
		return !( ($id==-1 && $result->num_rows>0) || ($id!=-1 && $result->num_rows>0) );
	return False;
}//-----------------------------------------------------------------------------

function insert_id()
{
	return $this->connect_id->insert_id;
}
}//**********************************************************************MySqlDb
?>
